import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * 773. 有效的字母异位词
 * 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。
 * https://www.lintcode.com/problem/vlid-anagram/description
 *
 * 样例
 * 样例 1:
 * 输入: s = "anagram", t = "nagaram"
 * 输出: true
 *
 * 样例 2:
 * 输入: s = "rat", t = "car"
 * 输出: false
 *
 * 挑战
 * 如果输入字符串包含 unicode 字符怎么办？你能否调整你的解法来应对这种情况？
 *
 * 注意事项
 * 你可以假设字符串只包含小写字母。
 *
 * @author jeymingwu
 * @date 2019/9/30 15:20
 */
public class L0773_Vlid_Anagram {

    /**
     * @param s: string s
     * @param t: string t
     * @return: Given two strings s and t, write a function to determine if t is an anagram of s.
     */
    public boolean isAnagram(String s, String t) {
        // write your code here
        if (s.length() != t.length()) {
            return false;
        }
        int[] numS = new int[128];
        int[] numT = new int[128];
        for (int i = 0; i < s.length(); ++i) {
            numS[s.charAt(i)]++;
            numT[t.charAt(i)]++;
        }
        for (int i = 0; i < 128; ++i) {
            if (numS[i] != numT[i]) {
                return false;
            }
        }
        return true;
    }

    /**
     * 方法二：
     * @param s
     * @param t
     * @return
     */
    public boolean isAnagram2(String s, String t) {
        // write your code here
        if (s.length() != t.length()) {
            return false;
        }
        char[] chars = s.toCharArray();
        char[] chart = t.toCharArray();
        Arrays.sort(chars);
        Arrays.sort(chart);
        for (int i = 0; i < chars.length; ++i) {
            if (chars[i] != chart[i]) {
                return false;
            }
        }
        return true;
    }
}
